perm filename MAKSEG.SAI[SYS,HE] blob
sn#004191 filedate 1972-09-25 generic text, type T, neo UTF8
COMMENT ⊗ VALID 00005 PAGES
RECORD PAGE DESCRIPTION
00001 00001 VALID 00005 PAGES
00002 00002 BEGIN "MAKE AN UPPER SEGMENT"
00003 00003 THIS IS THE MECHANISM FOR READING IN PROTOTYPES
00013 00004 GET THE GLOBAL MODEL SET UP WITH PROTOTYPES.
00015 00005 ***** BEGIN EXECUTION *****
00017 ENDMK
⊗;
BEGIN "MAKE AN UPPER SEGMENT"
REQUIRE 500 PNAMES;
REQUIRE 300 NEW_ITEMS;
REQUIRE "PREAMB.SAI[SYS,HE]" SOURCE_FILE;
REQUIRE "HASH[SYS,HE]" LOAD_MODULE;
REQUIRE "<>||" DELIMITERS;
DEFINE READ= <INTN(GETS)>,
READV(V)= <INTNV(GETS,V)>,
READA(A)= <INTNA(GETS,A)>,
FILE= <1>,
ID= <2>,
FIRST1= <1>,
TYPE= <OUTSTR(>,
S1U= <STEP 1 UNTIL>,
ITEM!= <ITEMCNT←ITEMCNT+1;>,
α= <COMMENT>,
EOM= <&'12&'15)>;
SAFE REAL ARRAY SIZE4[1:4];
SAFE REAL ARRAY TRAN[1:1024];
INTEGER I,J,BREAK,EOF,ITEMCNT;
STRING S;
SAFE INTEGER ARRAY HASHTAB[0:511];
SAFE STRING ARRAY PNAME[0:1024];
COMMENT THIS IS THE MECHANISM FOR READING IN PROTOTYPES
HANDLING NEW ITEMS IN THE WORLD;
SIMPLE INTEGER PROCEDURE CVFN(ITEM X);
BEGIN INTEGER I;
RETURN(IF (I←CVN(X))>1024 THEN I-3071 ELSE I);
END;
EXTERNAL INTEGER PROCEDURE HASH (STRING S);
EXTERNAL INTEGER PROCEDURE REHASH;
SIMPLE PROCEDURE HASHINDEX (STRING S;REFERENCE INTEGER I);
BEGIN
INTEGER HOLE,PTR;
HOLE←0;
I←HASH(S);
WHILE (PTR←HASHTAB[I])DO BEGIN
IF PTR>1024 THEN PTR←PTR-3071;
IF PTR<0 THEN HOLE←I ELSE
IF EQU(PNAME[PTR],S) THEN RETURN;
I←REHASH;
END;
IF HOLE THEN I←HOLE;
END;
SIMPLE ITEMVAR PROCEDURE INTN(STRING S);
BEGIN ITEMVAR X;
INTEGER F,I;
HASHINDEX (S,I);
IF HASHTAB[I]>0 THEN RETURN(CVI(HASHTAB[I]));
X←CVSI(S,F);
IF F THEN BEGIN X←GLOBAL NEW; ITEM! END;
HASHTAB[I]←CVN(X);
PNAME[CVFN(X)]←S;
RETURN(X)
END;
SIMPLE REAL ITEMVAR PROCEDURE INTNV(STRING S;REAL V);
BEGIN REAL ITEMVAR X;
INTEGER I;
HASHINDEX (S,I);
IF HASHTAB[I]>0 THEN RETURN(CVI(HASHTAB[I]));
X←GLOBAL NEW(V); ITEM!
HASHTAB[I]←CVN(X);
PNAME[CVFN(X)]←S;
RETURN(X)
END;
SIMPLE SAFE REAL ARRAY ITEMVAR PROCEDURE INTNA(STRING S;SAFE REAL ARRAY A);
BEGIN SAFE REAL ARRAY ITEMVAR X;
INTEGER I;
HASHINDEX (S,I);
IF HASHTAB[I]>0 THEN RETURN(CVI(HASHTAB[I]));
X←GLOBAL NEW(A); ITEM!
HASHTAB[I]←CVN(X);
PNAME[CVFN(X)]←S;
RETURN(X)
END;
SIMPLE STRING PROCEDURE PRINTNAME(ITEMVAR X);RETURN(PNAME[CVFN(X)]);
SIMPLE STRING PROCEDURE GETS;
BEGIN STRING S;
S←INPUT(FILE,FIRST1);
RETURN(INPUT(FILE,ID));
END;
COMMENT GET THE GLOBAL MODEL SET UP WITH PROTOTYPES. ;
SIMPLE PROCEDURE SEG_INIT;
BEGIN "SEGMENT INITIALIZATION"
ITEMVAR ATR,VAL,OBJ;
REAL ITEMVAR XR;
SAFE REAL ARRAY ITEMVAR X;
IF GOT_MODELS THEN RETURN;
SETBREAK(FIRST1,"ABCDEFGHIJKLMNOPQRSTUVWXYZ","","INR");
SETBREAK(ID,"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789","","XNS");
α READ IN PROTOTYPES FROM DISK;
ITEMCNT←0;
OPEN(FILE,"DSK",0,2,2,120,BREAK,EOF);
LOOKUP(FILE,"MODELS.TRP[SYS,HE]",I);
IF I≠0
THEN BEGIN
TYPE "PROTOTYPE FILE NOT FOUND." EOM;
RELEASE(FILE);
RETURN;
END;
XR←READ;
WHILE XR≠NIL DO
BEGIN ;
OUTSTR("PROTOTYPE "&CVIS(XR,I)&'12&'15);
GLOBAL MAKE PROTOTYPE⊗SCENE≡XR;
PUT XR IN PROTOTYPES;
XR←READ;
END;
XR←READV(0);
WHILE XR≠NIL DO
BEGIN ;
GLOBAL DATUM(XR)←REALIN(FILE);
XR←READV(0);
END;
X←READA(SIZE4);
WHILE X≠NIL DO
BEGIN FOR I←1 S1U 4 DO GLOBAL DATUM(X)[I]←REALIN(FILE);
X←READA(SIZE4);
END;
X←READ;
ATR←READ;
WHILE ATR≠NIL DO
BEGIN OBJ←READ;
VAL←READ;
GLOBAL MAKE ATR⊗OBJ≡VAL;
ATR←READ;
END;
TYPE "PROTOTYPES READ FROM DSK." EOM;
RELEASE (FILE);
GOT_MODELS ← TRUE;
END "SEGMENT INITIALIZATION";
COMMENT ***** BEGIN EXECUTION *****;
PUT_DATA(0,0,"SIMP"); α THIS PUTS VERSION NUMBER INTO UPPER;
PUT_DATA(-1,CALL(0,"PJOB"),NULL); α DELETE THE NAME,BUT LEAVE THE NUMBER;
ITEMCNT←0;
type "READING PROTOTYPES FROM DISK" eom;
SEG_INIT;
OUTSTR(CVS(ITEMCNT)&" NEW ITEMS CREATED"&'12&'15);
TYPE "ENTER GLOBAL MODEL FILENAME" EOM;
OPEN (8,"DSK",'13,0,2,200,I,I);
ENTER(8,INCHWL&".SEG[SYS,HE]",I);
DEFINE CALLI=<'47000000000>;
START_CODE
CALLI 1,'400022;
TRO 1,'400000 ;
MOVEM 1,I;
END;
FOR J←'400000 STEP 1024 UNTIL I DO
BEGIN START_CODE
HRL 1,J;
HRR 1,TRAN;
HRRZ 2,TRAN;
BLT 1,1023(2);
END;
ARRYOUT(8,TRAN[1],1024);
END;
RELEASE (8);
END "MAKE AN UPPER SEGMENT";